仮想マシンとは、仮想化技術を利用して、コンピューター内にもうひとつの別のコンピューターを再現する技術のことです。
仮想化されるものには、仮想マシン以外にも、仮想サーバー、仮想ストレージ、仮想ネットワーク、仮想メモリなどがあります。
仮想マシンには、主に「ホスト型」、「ハイパーバイザー型」、「コンテナ型」の3種類のアーキテクチャ(ソフトウェアまたはハードウェアの基本的な設計概念)があります。
ホスト型とは、物理マシンにWindowsやLinuxなどのOSをインストールして、その中に仮想ソフトウェアとなるアプリケーションをインストールして、仮想マシンを実現させる方式のことです。ホスト型のメリットは、既に利用しているパソコンやサーバーにも簡単にインストールできるため、導入しやすいという点が挙げられます。
ホスト型の代表的なソフトウェアは以下の通りです。
ハイパーバイザー型は、ホストのOSを使わずに直接サーバーに仮想化用ソフトウェアをインストールして仮想マシンを実現する方式のことです。現在、最も主流な方式としてハイパーバイザー型が浸透しています。メリットとしては、ホストOSが不要で直接ハードウェアを制御できるようになることから、仮想マシンの処理速度低下を最小限に抑えられるといった点が挙げられます。
ハイパーバイザー型の代表的なソフトウェアは以下の通りです。
コンテナ型は、物理マシンにWindowsやLinuxなどのホストOSをインストールして、コンテナ管理ソフトウェアをインストールして利用する方式のことです。コンテナ型は、アプリケーションやソフトウェアを実行環境と共にコンテナイメージ(コンテナのテンプレートファイル)として包括することから、コンテナ型と呼ばれています。コンテナ型の場合、コンテナイメージやソフトウェアそのものが軽量という特徴が挙げられます。
コンテナ型の代表的なソフトウェアは以下の通りです。
KVMは、Linux Kernel自体をハイパーバイザとする仕組みで、Kernel-based Virtual Machineの頭文字をとった略称で、カーネルベースの仮想マシンと訳されています。カーネルとは、OSの基本機能の役割を担うソフトウエアです。
KVMは現時点では、Intel VT-xやAMD-VといったCPUの仮想化支援機能を必要とし、完全仮想化によりOSの仮想化環境を提供します。
ハードウェアのエミュレーションやゲストOSの管理用のフロントエンドとして「QEMU」を使い、Linuxの上でゲストOSを動かします。
QEMUとは仮想マシン・エミュレータと呼ばれ、KVMなどの仮想マシンとともに利用する場合があります。この組み合わせにより、それぞれが得意な役割を担うことで、処理速度が向上するなどメリットが生まれます。
KVMは、Linuxカーネルに完全に組み込まれている。そのため、Linuxカーネルその物がハイパーバイザーとして動作する。仮想マシンは、Linux上のプロセスとして/dev/kvmというデバイスドライバを経由して動作する。
ハイパーバイザーには、仮想マシンを動かすための機能として、メモリ管理、プロセス管理、スケジューラ、入出力管理、デバイス管理、セキュリティ管理、ネットワークスタックなど、本来はOSが提供する機能が必要になる。しかし、KVMでは、これらの機能はLinuxに実装されているものを、そのまま利用する。
使用しているコンピュータにCPUの仮想化支援機能があるかどうか分からない場合は、/proc/cpuinfoを確認します。Intel VTの場合はvmxが、AMD-Vの場合はsvmがあるか否かが1つの判断基準となります。
$ grep vmx /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm |
$ grep svm /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy |
# yum install -y qemu-kvm libvirt virt-install libvirt-client virt-manager |
インストールが終わったら、デーモンを起動しいます。
# systemctl start libvirtd # systemctl enable libvirtd |
VMをインストールすると、初期設定としてvirbr0という名前のブリッジインターフェースと、defaultという名前の仮想ネットワークが作成されます。defaultは、virbr0に接続されたNATルータとして動作し、内部でDHCPサーバが起動しています。
● 仮想ネットワークの確認$ nmcli con | grep bridge virbr0 dffb02ec-554a-473e-b416-71334d164cbd bridge virbr0 # virsh net-list 名前 状態 自動起動 永続 ---------------------------------------------------------- default 動作中 はい (yes) はい (yes) # virsh net-info default 名前: default UUID: 3628ed33-3904-4ec8-a91c-4fdc51059cee 起動中: はい (yes) 永続: はい (yes) 自動起動: はい (yes) ブリッジ: virbr0 |
初期設定の仮想ネットワークdefaultはNATによるアウトバウンド通信が行えるものの、インバウンドの通信ができません。ホストマシンも含む、仮想ネットワークの外部から通信ができるように、新たにブリッジインターフェースをOS上に作成します。
● 仮想ネットワークの作成# nmcli con add type bridge con-name br0 ifname br0 # nmcli con mod br0 bridge.stp no # nmcli con mod br0 ipv4.method manual ipv4.addresses "192.168.1.3/24" ipv4.gateway "192.168.1.254" ipv4.dns 192.168.1.1 # nmcli con mod br0 autoconnect yes |
# nmcli con | grep bridge br0 bbe3f90a-58ba-4d69-8992-5ba493f5d604 bridge br0 virbr0 dffb02ec-554a-473e-b416-71334d164cbd bridge virbr0 |
# nmcli con add type bridge-slave ifname ens160 master br0 接続 'bridge-slave-ens160' (88b08213-efbf-4584-9148-c55c284db87d) が正常に追加されました |
# nmcli con up br0 接続が正常にアクティベートされました (master waiting for slaves) (D-Bus アクティブパス: /org/freedesktop/NetworkManager/ActiveConnection/7) |
物理インターフェースens160用のコネクション設定を削除します。SSHで設定対象ホストにリモート接続している場合、このタイミングで既存のIPアドレスが無効化されて接続が切断されるので注意してください。再接続するときは、ブリッジインターフェースbr0に設定したIPアドレスをSSHの接続先に指定します。
# nmcli con del ens160 |
qemuはPCエミュレータであり,CPU命令のエミュー レーションや,BIOS,PIC(Programmable Interrupt Controller), APIC( Advanced PIC), ACPI (Advanced Configuration and Power Interface), ディスクコントローラ,NIC,VGAなどのエミュレー ションを行います.
www.it-shikaku.jp
[Top] | |
[講義目次] | |
[2.04:システムの保守と運用管理] | |
[2.05:仮想化サーバー] | |
[2.05.1 仮想マシンの仕組みとKVM] | |
[2.05.2 仮想マシンの作成と管理] | |
[2.06:コンテナ] | |
[講義検索] | |
[リンク集] |